#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

void* task(void* argv)
{
    printf("thread start\n");
    // 默认取消类型是延迟
    printf("working...\n");
    sleep(1);
    // 人为调用取消点函数
    pthread_testcancel();
    printf("after cancel\n");
    return NULL;
}

int main(int argc, char const *argv[])
{
    // 创建线程
    pthread_t tid;
    pthread_create(&tid, NULL, task, NULL);
    // 取消子线程
    if(pthread_cancel(tid) != 0)
    {
        perror("pthread_cancel");
    };
    void* res;
    // pthread_cancel只是发出一个停止的命令
    // pthread_join会挂起 一直等待子线程运行结束
    pthread_join(tid, &res);
    
    if(res == PTHREAD_CANCELED)
    {
        printf("线程被取消\n");
    }
    else
    {
        printf("线程还没有被取消 exit code %ld\n", (long)res);
    }


    return 0;
}
